package modelo;

import java.sql.ResultSet;
import java.util.List;
import java.util.ArrayList;

public class IngredienteDao 
{
	public Ingrediente getIngrediente(String cod_ingrediente) throws Exception
	{
		Ingrediente ingrediente= new Ingrediente();
		
		String tiraSQL= "select * from \"INGREDIENTES\" where cod_ingrediente='" + cod_ingrediente + "' and " +
				        "status='A'";
		
		ResultSet rs= Conexion.ejecutarDQL(tiraSQL);
		
		if (rs.next())
		{
			ingrediente.setCodigo(cod_ingrediente);
		    ingrediente.setNombreCorto(rs.getString("nombre_corto"));
		    ingrediente.setNombreLargo(rs.getString("nombre_largo"));
		    ingrediente.setUnidadMedida(rs.getString("unidad_medida"));
		    ingrediente.setCosto(rs.getDouble("costo"));
		    ingrediente.setExistencia(rs.getDouble("existencia"));
		}
		
		return ingrediente;
	}
	
	public List<Ingrediente> consultarIngredientesActivos() throws Exception
	{
		ArrayList<Ingrediente> ingredientes= new ArrayList<Ingrediente>();
		
		String tiraSQL= "select * from \"INGREDIENTES\" where status='A'";
		
		ResultSet rs= Conexion.ejecutarDQL(tiraSQL);
		
		Ingrediente ingrediente;
		
		while (rs.next())
		{
			ingrediente= new Ingrediente();
			
			ingrediente.setCodigo(rs.getString("cod_ingrediente"));
		    ingrediente.setNombreCorto(rs.getString("nombre_corto"));
		    ingrediente.setNombreLargo(rs.getString("nombre_largo"));
		    ingrediente.setUnidadMedida(rs.getString("unidad_medida"));
		    ingrediente.setCosto(rs.getDouble("costo"));
		    ingrediente.setExistencia(rs.getDouble("existencia"));
		    
		    ingredientes.add(ingrediente);
		}
		
	
		return ingredientes;
	}
	public boolean registrarIngrediente(Ingrediente ingrediente) throws Exception
	{
		String tiraSQL="insert into \"INGREDIENTES\" " + 
		               "(cod_ingrediente,nombre_corto,nombre_largo,unidad_medida,costo,existencia,status) " + 
		               "values ('" + 
		               ingrediente.getCodigo() + "','" +
		               ingrediente.getNombreCorto() + "','" + 
		               ingrediente.getNombreLargo() + "','" +		                
		               ingrediente.getUnidadMedida() + "','" +
		               ingrediente.getCosto() + "','" +
		               ingrediente.getExistencia() + "','A')";
		
		boolean ejecutado=Conexion.ejecutarDML(tiraSQL);
		
		return ejecutado;
	}
	
	public boolean activarIngrediente(Ingrediente ingrediente) throws Exception
	{
		String tiraSQL= "update \"INGREDIENTES\" set status='A' where cod_ingrediente='" + ingrediente.getCodigo() + "'";
        
		boolean ejecutado=Conexion.ejecutarDML(tiraSQL);
		
		return ejecutado;
	}
	
	public boolean eliminarIngrediente(Ingrediente ingrediente) throws Exception
	{
		String tiraSQL= "update \"INGREDIENTES\" set status='E' where cod_ingrediente='" + ingrediente.getCodigo() + "'";
        
		boolean ejecutado=Conexion.ejecutarDML(tiraSQL);
		
		return ejecutado;
	}
	
	public boolean actualizarIngrediente(Ingrediente ingrediente) throws Exception
	{
		String tiraSQL= "update \"INGREDIENTES\" set " +
	                    "nombre_corto='" + ingrediente.getNombreCorto() + "'," +
	                    "nombre_largo='"+ ingrediente.getNombreLargo() + "'," + 
	                    "unidad_medida='" + ingrediente.getUnidadMedida() +  "'," +
	                    "costo=" + ingrediente.getCosto() +  "," +
	                    "existencia=" + ingrediente.getExistencia() +  " " +
	                    "where cod_ingrediente='" + ingrediente.getCodigo() + "' and status!='E'";
		
		boolean ejecutado=Conexion.ejecutarDML(tiraSQL);
		
		return ejecutado;
	}
	
	
	public boolean isEliminado(Ingrediente ingrediente) throws Exception
	{
        boolean seEncuentra= false;
		
		String tiraSQL= "select cod_ingrediente,nombre_corto,nombre_largo,unidad_medida,costo,existencia" +
        " from \"INGREDIENTES\" where cod_ingrediente='" + ingrediente.getCodigo() + 
        "' and status='E'";
		
		ResultSet rs= Conexion.ejecutarDQL(tiraSQL);
		
		if (rs.next())
		{	
			seEncuentra= true;
			
			String nombre_corto="",nombre_largo="",unidad_medida="";
			
			ingrediente.setNombreCorto(nombre_corto);
			ingrediente.setNombreLargo(nombre_largo);
			ingrediente.setUnidadMedida(unidad_medida);
			ingrediente.setCosto(0.0);
			ingrediente.setExistencia(0.0);			
		}
		
		return seEncuentra;
	}
	
	public boolean consultarIngrediente(Ingrediente ingrediente) throws Exception
	{
		boolean seEncuentra= false;
		
		String tiraSQL= "select cod_ingrediente,nombre_corto,nombre_largo,unidad_medida,costo,existencia" +
        " from \"INGREDIENTES\" where cod_ingrediente='" + ingrediente.getCodigo() + 
        "' and status='A'";
		
		ResultSet rs= Conexion.ejecutarDQL(tiraSQL);
		
		if (rs.next())
		{	
			seEncuentra= true;
			
		}
		
		return seEncuentra;
	}
	
	public boolean isDependiente(Ingrediente ingrediente) throws Exception
	{
		boolean dependiente= false;
		
		String tiraSQL= "select \"INGREDIENTES\".cod_ingrediente from \"INGREDIENTES\",\"COMPRAS\" " +
				        "where \"INGREDIENTES\".cod_ingrediente='" + ingrediente.getCodigo() + 
				        "' and \"INGREDIENTES\".cod_ingrediente=\"COMPRAS\".cod_ingrediente " +
				        "and " + "\"INGREDIENTES\".status='A' and \"COMPRAS\".status='A'";
		
        ResultSet rs= Conexion.ejecutarDQL(tiraSQL);
		
		if (rs.next())
		{	
			dependiente= true;
			
		}
		
		if (!dependiente)
		{
			tiraSQL = "select \"INGREDIENTES\".cod_ingrediente from \"INGREDIENTES\",\"PRODUCTOS_INGREDIENTES\"" +
					         "where \"INGREDIENTES\".cod_ingrediente='" + ingrediente.getCodigo() + 
					         "' and \"INGREDIENTES\".cod_ingrediente=\"PRODUCTOS_INGREDIENTES\".cod_ingrediente " +
					         "and  \"PRODUCTOS_INGREDIENTES\".cod_compra=\"PRODUCTOS_INGREDIENTES\".cod_compra and " +
					         " \"INGREDIENTES\".status='A' and \"PRODUCTOS_INGREDIENTES\".status='A'";
		}
		
		return dependiente;
	}
	
	public double getCostoUnitarioIngrediente(Ingrediente ingrediente) throws Exception
	{
        double costo= 0.0;
		
		String tiraSQL= "select costo from \"INGREDIENTES\" where cod_ingrediente='" + 
		ingrediente.getCodigo() + "' and status='A'";
		
		ResultSet rs= Conexion.ejecutarDQL(tiraSQL);
		
		if (rs.next())
		{	
			costo = rs.getDouble("costo");
		}
		
		return costo;
	}

}
